[Android] YouTube Android Player API で Youtube 動画を再生
こんにちは、橋本です。 AndroidアプリでYoutube動画を再生するための検証を行ったので、備忘録としてまとめます。
ライブラリの導入
ライブラリのダウンロード
https://developers.google.com/youtube/android/player/downloads/?hl=ja
APIキーの取得
公式ガイドに従って、YouTube Data API v3を有効にしたAPIキーを取得します。
https://developers.google.com/youtube/android/player/register?hl=ja
動画再生の実装
まず、再生したい動画のIDを取得します。動画IDは、YouTubeの動画再生ページのURLや共有URLから判別できます。
- https://www.youtube.com/watch?v=<Youtube動画ID>
- https://youtu.be/<Youtube動画ID>
動画再生の実装には、以下の方法があります。
- YouTubeStandalonePlayer
- YoutubePlayerFragment(YoutubePlayerSupportFragment)
- YoutubePlayerView
YouTubeStandalonePlayer
一番簡単な再生方法として YouTubeStandalonePlayer
を利用する方法があります。
Activityなどに、下記実装をするだけで動画を再生できます。
Intent intent = YouTubeStandalonePlayer.createVideoIntent(context, <取得したAPIキー>, <Youtubeの動画ID>); startActivity(intent);
YoutubePlayerFragment(YoutubePlayerSupportFragment)
次に YoutubePlayerFragment
を利用する方法があります。
Fragmentなので、Styleの継承やレイアウトのカスタマイズができます。 ただし、Playerの表示サイズは少なくとも 200x110 dp必要です。
下記は、xmlでFragmentを指定した場合の例です
xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <fragment android:id="@+id/youtube_player" android:name="com.google.android.youtube.player.YouTubePlayerFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
java
YouTubePlayerFragment youTubePlayerFragment = (YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_player); youTubePlayerFragment.initialize(<取得したAPIキー>, new YouTubePlayer.OnInitializedListener() { @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { player.loadVideo(<Youtubeの動画ID>); } @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { } });
YoutubePlayerView
最後に YoutubePlayerView
を利用する方法があります。
この場合は、 実装するActivityにYouTubeBaseActivityをextendsする必要があります。 また、YouTubeBaseActivityの継承元はActivityなので注意が必要です。(FragmentActivityではない)
YouTubeBaseActivity 以外で使用した場合、下記のExceptionがスローされます。
IllegalStateException("A YouTubePlayerView can only be created with an Activity which extends YouTubeBaseActivity as its context.")
Fragmentの場合と同じく、Playerの表示サイズは少なくとも 200x110 dp必要です。
xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <com.google.android.youtube.player.YouTubePlayerView android:id="@+id/youtube_player" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </FrameLayout>
java
YouTubePlayerView youtubePlayerView = findViewById(R.id.youtube_fragment); youtubePlayerView.initialize(<取得したAPIキー>, new YouTubePlayer.OnInitializedListener() { @Override public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { player.loadVideo(<Youtubeの動画ID>); } @Override public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult youTubeInitializationResult) { } });
以上です。